package com.wangjie.doublepointer;

/**
 * @author jieshao
 * @date 2022/4/25 16:11
 *
 * 26. 删除有序数组中的重复项(快慢指针技巧)
 *
 * 我们让慢指针 slow 走在后面，快指针 fast 走在前面探路，找到一个不重复的元素就告诉 slow 并让 slow 前进一步。
 * 这样当 fast 指针遍历完整个数组 nums 后，nums[0..slow] 就是不重复元素。
 */
public class Test06 {
    public int removeDuplicates(int[] nums) {
        int slow = 0;
        int fast = 0;
        while (fast < nums.length) {
            if (nums[fast] != nums[slow]) {
                slow++;
                // 维护 nums[0..slow] 无重复
                nums[slow] = nums[fast];
            }
            fast++;
        }
        // 数组长度为索引 + 1
        return slow + 1;
    }
}